# -*- coding: utf8 -*-

import os
import platform

class MRename:
    """
    用于批量重命名视频文件及其对应的.nfo文件的类。
    """
    def __init__(self, dir_path):
        """
        初始化目录路径。
        
        :param dir_path: 需要进行重命名操作的目录路径。
        """
        self.dir_path = dir_path

    def check_list(self):
        """
        检查目录下所有.nfo文件，并返回包含这些文件路径的列表。
        
        :return: 包含所有.nfo文件路径的列表。
        """
        file_dic = []
        paths = os.walk(self.dir_path)
        for path, dir_list, file_list in paths:
            for file_name in file_list:
                if '.nfo' in os.path.join(path, file_name):
                    file_dic.append(os.path.join(path, file_name))
        return file_dic

    def rename_file(self, file_dic, character):
        """
        根据.nfo文件中的标题信息，重命名对应的视频文件和.nfo文件。
        
        :param file_dic: 包含所有.nfo文件路径的列表。
        :param character: 文件路径中的目录分隔符。
        """
        m_type = {'mkv', 'wmv', 'mp4', 'mov', 'rmvb', 'rm', 'flv', 'avi'}
        for file in file_dic:
            # 根据.nfo文件路径获取视频文件名和路径
            mname = file.replace('.nfo', '')
            fname = file.split(f'{character}')[-1]
            mpath = file.split(fname)[0]
            new_name = ''
            # 从.nfo文件中提取标题信息作为新的文件名
            for line in open(file, 'r', encoding='utf-8', errors='ignore').readlines():
                if '<title>' in line:
                    new_name = mpath + str(
                        line.replace("<title>", '').replace("</title>", '').replace(' ', '').replace('\n', ''))
                    break
            # 如果新的文件名不为空且与原文件名不同，则进行重命名操作
            if new_name != '' and new_name != mname:
                try:
                    for mtype in m_type:
                        # 检查并重命名视频文件
                        if os.path.exists(mname + '.' + mtype):
                            print("oldname: " + mname)
                            print("newname:" + new_name)
                            print("-----------------------")
                            os.rename(mname + '.' + mtype, new_name + '.' + mtype)
                            # 重命名.nfo文件
                            os.rename(mname + '.nfo', new_name + '.nfo')
                            break
                except:
                    print("have some error, skip......")

# 获取系统类型，以确定目录分隔符
sys = platform.system()
if sys == "Windows":
    character = '\\'
    video_dir = 'Z:\\video\\movies'
elif sys == "Linux":
    character = '/'
    video_dir = '/volume2/video/movies'



# 创建MRename实例并进行重命名操作
process = MRename(video_dir)
dic = process.check_list()
process.rename_file(dic, character)
print("rename finished.")

## cd /tmp/;wget https://gitee.com/team_space/mynet_info/raw/master/emby_movie_rename.py;python3 emby_movie_rename.py
